# uncompyle6 version 3.2.3
# Python bytecode 3.6 (3379)
# Decompiled from: Python 3.6.8 |Anaconda custom (64-bit)| (default, Feb 21 2019, 18:30:04) [MSC v.1916 64 bit (AMD64)]
# Embedded file name: site-packages\yaml\error.py
__all__ = ["Mark", "YAMLError", "MarkedYAMLError"]


class Mark:
    def __init__(self, name, index, line, column, buffer, pointer):
        self.name = name
        self.index = index
        self.line = line
        self.column = column
        self.buffer = buffer
        self.pointer = pointer

    def get_snippet(self, indent=4, max_length=75):
        if self.buffer is None:
            return
        else:
            head = ""
            start = self.pointer
            while start > 0:
                if self.buffer[start - 1] not in "\x00\r\n\x85\u2028\u2029":
                    start -= 1
                    if self.pointer - start > max_length / 2 - 1:
                        head = " ... "
                        start += 5
                        break

            tail = ""
            end = self.pointer
            while end < len(self.buffer):
                if self.buffer[end] not in "\x00\r\n\x85\u2028\u2029":
                    end += 1
                    if end - self.pointer > max_length / 2 - 1:
                        tail = " ... "
                        end -= 5
                        break

            snippet = self.buffer[start:end]
            return (
                " " * indent
                + head
                + snippet
                + tail
                + "\n"
                + " " * (indent + self.pointer - start + len(head))
                + "^"
            )

    def __str__(self):
        snippet = self.get_snippet()
        where = '  in "%s", line %d, column %d' % (
            self.name,
            self.line + 1,
            self.column + 1,
        )
        if snippet is not None:
            where += ":\n" + snippet
        return where


class YAMLError(Exception):
    pass


class MarkedYAMLError(YAMLError):
    def __init__(
        self,
        context=None,
        context_mark=None,
        problem=None,
        problem_mark=None,
        note=None,
    ):
        self.context = context
        self.context_mark = context_mark
        self.problem = problem
        self.problem_mark = problem_mark
        self.note = note

    def __str__(self):
        lines = []
        if self.context is not None:
            lines.append(self.context)
        if self.context_mark is not None:
            if (
                self.problem is None
                or self.problem_mark is None
                or self.context_mark.name != self.problem_mark.name
                or self.context_mark.line != self.problem_mark.line
                or self.context_mark.column != self.problem_mark.column
            ):
                lines.append(str(self.context_mark))
        if self.problem is not None:
            lines.append(self.problem)
        if self.problem_mark is not None:
            lines.append(str(self.problem_mark))
        if self.note is not None:
            lines.append(self.note)
        return ("\n").join(lines)
